#ifndef GL_INCLUDES
#define GL_INCLUDES
#ifdef linux
#include<GL/glew.h>
#include<GLFW/glfw3.h>
#else
#include<glew.h>
#include<glfw3.h>
#endif
#endif

class myShader
{
    int shaderType;
    GLuint handle;
    GLuint errorcode;
    char* shaderSource;
    GLenum glShaderType;
    void setGLShaderType();
    const char *shaderName;
    public:
    static const int vertexShader = 0x0;
    static const int fragmentShader = 0x1;
    myShader(const int type, const char *name);
    void readFile(const char *file);
    void copyString(const char *string);
    void createShaderFromFile(const char *file);
    void createShaderFromString(const char *string);
    const int getType();
    void compileShader();
    GLuint getHandle();
    const char *typeToString();
};
class myShaderPipe
{
    static const int numStages = 0x8; // VS, TES, TCS, GS, FS 
    GLuint handle;
    GLuint shaders[numStages];
    public:
    myShaderPipe();
    void attachShader(myShader *shader);
    void createProgram();
    void linkPipe();
    GLuint getHandle();

};
